
package com.hhwy.framework.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;


/**
 * 
 * 创建日期:Dec 29, 2008
 * <br>Title:文件所属模块（日期处理工具类）
 * <br>Description：对本文件的详细描述，原则上不能少于30字
 * <br>@author ZhangBaoRong
 * <br>@mender：（文件的修改者，文件创建者之外的人）
 * <br>@version 1.0
 * <br>Remark：认为有必要的其他信息
 */
public class DateTools {

	private static String[] week = new String[] { "日", "一", "二", "三", "四", "五","六" };
	
	/**
	 * 功能: 两日期间的差值<br>
	 * @param before
	 * @param after
	 * @return
	 */
	public static int getMinusDays(Date before, Date after) {
		if(null == before || null == after)
			return 0;
		long interval = after.getTime() - before.getTime();
		return new Long(interval / (24 * 60 * 60 * 1000)).intValue();
//		return after.compareTo(before);
	}
	
	public static String getSmartTimeFormat(Date date) {
		
		if(date == null)
			return "";
		
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(DateTools.getNowDate());
		
		int y0 = calendar.get(Calendar.YEAR);
		int m0 = calendar.get(Calendar.MONTH);
		int d0 = calendar.get(Calendar.DATE);
		//昨天时间
		calendar.add(Calendar.DATE,   -1);
		int yesterdayY = calendar.get(Calendar.YEAR);;
		int yesterdayM = calendar.get(Calendar.MONTH);;
		int yesterdayD = calendar.get(Calendar.DATE); 
		
		calendar.setTime(date);
		int y1 = calendar.get(Calendar.YEAR);
		int m1 = calendar.get(Calendar.MONTH);
		int d1 = calendar.get(Calendar.DATE);

		// 默认为今年，但不是今天
		String formatString = "MM/dd";
		if (y0 != y1) {
			// 不是今年
			formatString = "yyyy-MM-dd";
		}else if((yesterdayY == y1) && (yesterdayM == m1) && (yesterdayD == d1)){
			//昨天
			return "昨天";
		} else if (m0 == m1 && d0 == d1) {
			// 今天
			formatString = "HH:mm";
		}
		
		return DateTools.dateToStr(date,formatString);
	}

	/**
	 * 功能:	 两日期间所差的天数
	 * 作者: gucaiyun
	 * 创建日期:Jan 25, 2010
	 * @param before
	 * @param after
	 * @return
	 */
	public static int getDays(Date before,Date after){
		if(null == before || null == after)
			return 0;
		try {
			SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd");  
			Date dt1 = formatter.parse(formatter.format(before)); 
			Date dt2 = formatter.parse(formatter.format(after));
			//将得到的日期字符串转换为日期类型
			long interval = dt2.getTime() - dt1.getTime();
			if(interval < 0)
				interval = interval * (-1);
			return (int)(interval / (1000 * 60 * 60 *24));
		} catch (ParseException e) {
			e.printStackTrace();
		}     
		return 0;
	}

	/*****************获取当前时间的年月日系列方法*********************/
	
	/**
	 * 功能:获得当前年份 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @return
	 */
	public static int getYear() {
		return Calendar.getInstance().get(Calendar.YEAR);
	}
	
	/**
	 * 功能: 获得当前月份 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18 <br>
	 * @return
	 */
	public static int getMonth() {
		return Calendar.getInstance().get(Calendar.MONTH) + 1;
	}
	
	/**
	 * 功能: 获得当前日<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18 <br>
	 * @return
	 */
	public static int getDay() {
		return Calendar.getInstance().get(Calendar.DATE);
	}	
	
	/**
	 * 功能:获得当前小时 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @return
	 */
	public static int getHour() {
		return Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
	}
	
	/**
	 * 功能:获得当前分钟 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @return
	 */
	public static int getMin() {
		return Calendar.getInstance().get(Calendar.MINUTE);
	}
	
	/**
	 * 功能:获得当前秒<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @return
	 */
	public static int getSec() {
		return Calendar.getInstance().get(Calendar.SECOND);
	}
	
	/**
	 * 功能:获得当前毫秒 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @return
	 */
	public static long getMillis() {
	   return Calendar.getInstance().getTimeInMillis();
	}
	
	/**
	 * 功能: 指示一个星期中的星期几<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @return
	 */
	public static String getWeek() {
		return week[Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1];
	}
	
	
	
	/****************获取指定日期yyyy-MM-dd格式的年，月，日，周***********************/
	
	/**
	 * 返回指定年份的 Calendar实例<br>
	 */
	public static Calendar getCalendarFromYear(String strDate){
    	Calendar calendar=Calendar.getInstance();
    	SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
    	Date time;
		try {
			time = format.parse(strDate);
	    	calendar.setTime(time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
    	return calendar;
	}
	
    /**
     * 
     * 功能:获得传入日期的年份<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
     * @param strDate
     * @return
     */
    public static int getYear(String strDate){
    	Calendar calendar = getCalendarFromYear(strDate);
    	return calendar.get(Calendar.YEAR);
    }
    
    /**
     * 
     * 功能:获得传入日期的月数<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
     * @param strDate
     * @return
     */
    public static int getMonth(String strDate){
    	Calendar calendar = getCalendarFromYear(strDate);
    	int month=0;
	    month=calendar.get(Calendar.MONTH)+1;
    	return month;
    }
    
    
    /**
     * 
     * 功能:获得传入日期的日数<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
     * @param strDate
     * @return
     */
    public static int getDay(String strDate){
    	Calendar calendar = getCalendarFromYear(strDate);
    	return calendar.get(Calendar.DATE) ;
    }
    
    
	/**
	 * 
	 * 功能:获得传入日期的周数
	 * 作者: ZhangBaoRong
	 * 创建日期:2008-12-18
	 * @param strDate
	 * @return
	 */
    public static String getWeek(String strDate){
    	Calendar calendar = getCalendarFromYear(strDate);
    	return week[calendar.get(Calendar.DAY_OF_WEEK) - 1];
    }
    
    
    
    /********************日期周数精度计算--移植刘海平的周报日期工具类******* 用Calendar类计算周和周的起始日期******************/
    
	
	/**
	 * 功能: 取得某一年共有多少周（说明：周六为这周的第一天）<br>
	 * 作者: LiuHaiping<br>
	 * 创建日期: 2008-3-18<br>
	 * @param year
	 * @return
	 */
	public static int getMaxWeekNumOfYear(int year) {
		Calendar c = new GregorianCalendar();
		c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
		return getWeekOfYear(c.getTime());
	}
	
	/**
	 * 功能: 取得某天是一年中的第几周（说明：周六为这周的第一天）<br>
	 * 作者: LiuHaiping<br>
	 * 创建日期: 2008-3-18<br>
	 * @param date
	 * @return
	 */
	public static int getWeekOfYear(Date date) {
		Calendar c = new GregorianCalendar();
		c.setFirstDayOfWeek(Calendar.MONDAY); // 周一
		c.setMinimalDaysInFirstWeek(7);
		c.setTime(date);
		return c.get(Calendar.WEEK_OF_YEAR);
	}


	/**
	 * 功能: 取得某年某周的第一天（对于交叉周、如2008-12-27到2009-01-02<br>
	 * 属于2008年的最后一周,2009-01-03为2009年第一周的第一天）<br>
	 * （说明：周六为这周的第一天）<br>
	 * 作者: LiuHaiping<br>
	 * 创建日期: 2008-3-18<br>
	 * @param year
	 * @param week
	 * @return
	 */
	public static Date getFirstDayOfWeek(int year, int week) {
		Calendar calFirst = Calendar.getInstance();
		calFirst.set(year, 0, 7);

		Date firstDate = getFirstDayOfWeek(calFirst.getTime());

		Calendar firstDateCal = Calendar.getInstance();
		firstDateCal.setTime(firstDate);

		Calendar c = new GregorianCalendar();
		c.set(Calendar.YEAR, year);
		c.set(Calendar.MONTH, Calendar.JANUARY);
		c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));

		Calendar cal = (GregorianCalendar) c.clone();
		cal.add(Calendar.DATE, (week - 1) * 7);
		firstDate = getFirstDayOfWeek(cal.getTime());

		return firstDate;
	}

	/**
	 * 功能: 取得某年某周的最后一天（对于交叉周、如2008-12-27到2009-01-02<br>
	 * 属于2008年的最后一周,2009-01-03为2009年第一周的第一天）<br>
	 * （说明：周六为这周的第一天）<br>
	 * 作者: LiuHaiping<br>
	 * 创建日期: 2008-3-18<br>
	 * 
	 * @param year
	 * @param week
	 * @return
	 */
	public static Date getLastDayOfWeek(int year, int week) {
		Calendar calLast = Calendar.getInstance();
		calLast.set(year, 0, 7); 
		Date firstDate = getLastDayOfWeek(calLast.getTime());

		Calendar firstDateCal = Calendar.getInstance();
		firstDateCal.setTime(firstDate);

		Calendar c = new GregorianCalendar();
		c.set(Calendar.YEAR, year);
		c.set(Calendar.MONTH, Calendar.JANUARY);
		c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE));

		Calendar cal = (GregorianCalendar) c.clone();
		cal.add(Calendar.DATE, (week - 1) * 7);
		Date lastDate = getLastDayOfWeek(cal.getTime());

		return lastDate;
	}	
	
	
	
	/**
	 * 功能: 取得某天所在周的第一天（说明：周一为这周的第一天）<br>
	 * 作者: LiuHaiping<br>
	 * 创建日期: 2008-3-18<br>
	 * @param date
	 * @return
	 */
	public static Date getFirstDayOfWeek(Date date) {
		Calendar c = new GregorianCalendar();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setTime(date);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
		return c.getTime();
	}
	
	
	/**
	 * 功能: 取得某天所在周的最后一天（说明：周一为这周的第一天）<br>
	 * 作者: LiuHaiping<br>
	 * 创建日期: 2008-3-18<br>
	 * @param date
	 * @return
	 */
	public static Date getLastDayOfWeek(Date date) {
		Calendar c = new GregorianCalendar();
		c.setFirstDayOfWeek(Calendar.MONDAY);
		c.setTime(date);
		c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6);
		return c.getTime();
	}
	

	/**
	 * 功能: 取得某年某月的第一天（说明：上月25号为本月第一天）<br>
	 * 作者: LiuHaiping<br>
	 * 创建日期: 2008-3-18<br>
	 * @param year
	 * @param month
	 * @return
	 */
	public static Date getFirstDayOfMonth(int year ,int month){
		Calendar c = new GregorianCalendar();
		c.set(Calendar.YEAR, year);
		c.set(Calendar.MONTH,month-2); 
		c.set(Calendar.DAY_OF_MONTH,26); //上月26号
	   return c.getTime();
	}
	
	
	
	/**
	 * 功能: 取得某年某月的最后一天（说明：上月25号为本月第一天）<br>
	 * 作者: LiuHaiping<br>
	 * 创建日期: 2008-3-18<br>
	 * @param year
	 * @param month
	 * @return
	 */
	public static Date getLastDayOfMonth(int year ,int month){
		Calendar c = new GregorianCalendar();
		c.set(Calendar.YEAR, year);
		c.set(Calendar.MONTH,month-1);
		c.set(Calendar.DAY_OF_MONTH,25); //本月25号
	   return c.getTime();
	}

    
    
    
	
	

	 /****************获取月份中的日期***********/
	
	/**
	 * 
	 * 功能: 获得当前月的第一天.如:今天是2006-08-16 则返回:2006-08-01 
	 * 作者: ZhangBaoRong
	 * 创建日期:2008-12-18
	 * @return
	 */
	public static String getFirstDayOfThisMonth() {
		return new SimpleDateFormat("yyyy-MM-").format(new Date()) + "01";

	}
	
	/**
	 * 
	 * 功能: 获得当前月的第一天.如:今天是2006-08-16 则返回:2006-08-01 
	 * 作者: ZhangBaoRong
	 * 创建日期:2008-12-18
	 * @param ymdStr
	 * @return str
	 */
	public static String getFirstDayOfThisMonth(String ymdStr) {
		Date date = null;
		try {
			date = strToDateByYmd(ymdStr);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new SimpleDateFormat("yyyy-MM-").format(date)+ "01";
	}

	/**
	 * 
	 * 功能:获得当前月的最后一天.如:今天是2006-08-16 则返回:2006-08-31 
	 * 作者: ZhangBaoRong
	 * 创建日期:2008-12-18
	 * @return
	 */
	public static String getLastDayOfThisMonth() {
		Calendar c = Calendar.getInstance(); // 当时的日期和时间
		c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1);
		c.set(Calendar.DAY_OF_MONTH, 0);
		return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
	}

	
	/**
	 * 
	 * 功能:获得当前月的最后一天.如:今天是2006-08-16 则返回:2006-08-31 
	 * 作者: ZhangBaoRong
	 * 创建日期:2008-12-18
	 * @return
	 */
	public static String getLastDayOfThisMonth(String ymdStr) {
		Date date = null;
		try {
			date = strToDateByYmd(ymdStr);
		} catch (Exception e) {
			e.printStackTrace();
		}
		Calendar c = Calendar.getInstance();
		c.setTime(date); // 当时的日期和时间
		c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1);
		c.set(Calendar.DAY_OF_MONTH, 0);
		return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
	}
	
	
	
	
	
	
	
	
 	  /*****************获取当前时间格式系列  返回值String类型化*********************/
	
	
	/**
	 * 
	 * 功能:返回当前日期的字符串形式
	 * （返回格式：yyyy-MM-dd HH:mm:ss）<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param dateTimeStr<br>
	 * @return
	 */
	public static String getYmdHmsStr() {
		return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
	}
	
	/**
	 * 
	 * 功能: 返回下一月当天时间
	 * 作者: wangxy
	 * 创建日期:2014-4-19
	 * 修改者: mender
	 * 修改日期: modifydate
	 * @return
	 */
	public static Date getNextMonth(){
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(getNowDate());
		//月份+1
		calendar.add(Calendar.MONTH, 1);
		return calendar.getTime();
	}
	
	/***
	 * 
	 * 功能:获得当前日期
	 * 作者: wangxy
	 * 创建日期:2014-4-19
	 * 修改者: mender
	 * 修改日期: modifydate
	 * @return
	 */
	public static Date getNowDate(){
		return new Date();
	}
	
	/**
	 * 
	 * 功能: 返回指定Date类型的字符串形式（返回格式：yyyy-MM-dd HH:mm:ss）<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param dateTimeStr<br>
	 * @return
	 */
	public static String getYmdHmsStr(Date date) {
		return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
	}
	
	
	/**
	 * 
	 * 功能: 返回当前日期的类型的日期部分
	 * （返回格式：yyyy-MM-dd）<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param dateTimeStr<br>
	 * @return
	 */
	public static String getYmdStr() {
		return new SimpleDateFormat("yyyy-MM-dd").format(new Date());
	}
	
	/**
	 * 
	 * 功能: 返回指定Date类型的日期部分
	 * （返回格式：yyyy-MM-dd）<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param dateTimeStr<br>
	 * @return
	 */
	public static String getYmdStr(Date date) {
		if (date == null)
			return "";
		else
			return new SimpleDateFormat("yyyy-MM-dd").format(date);
	}
	
	/**
	 * 
	 * 功能: 返回指定Date类型的日期部分
	 * （返回格式：HH:mm:ss）<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param dateTimeStr<br>
	 * @return
	 */
	public static String getHmsStr() {
		return new SimpleDateFormat("HH:mm:ss").format(new Date());
	}
	
	
	/**
	 * 
	 * 功能: 返回当前日期类型的日期部分
	 * （返回格式：yyyy-MM-dd）<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param dateTimeStr<br>
	 * @return
	 */
	public static String getHmsStr(Date date) {
		if (date == null)
			return "";
		else
			return new SimpleDateFormat("HH:mm:ss").format(date);
	}
	
	
	
	
	/*****************日期和字符串转换函数系列*********************/
	
	
   	/**
   	 * 功能: 字符串类型转换成指定格式的Date类型<br>
   	 * 作者: ZhangBaoRong<br>
   	 * 创建日期: Aug. 3, 2009<br>
   	 * @param str
   	 * @param pattern
   	 * @return
   	 */
   	public static Date strToDate(String str,String pattern) throws Exception{
   		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
   		if(str != null && !"".equals(str))
			   return sdf.parse(str);
		return null;
   	}
	

	/**
	 * 
	 * 功能: 字符串类型转换成yyyy-MM-dd HH:mm:ss格式的日期类型<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param date
	 * @return
	 * @throws Exception 
	 */
	public static Date strToDateByYmdHms(String str) throws Exception{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		if(str == null && "".equals(str))
			return null;
		else
			return sdf.parse(str);
	}	
	
	/**
	 * 
	 * 功能: 字符串类型转换成yyyy-MM-dd格式的日期类型<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param date
	 * @return
	 */
	public static Date strToDateByYmd(String str) throws Exception {
		if(str == null || "".equals(str.trim()))
			return null;
		else
			return new SimpleDateFormat("yyyy-MM-dd").parse(str);
	}	
	
	
  	/**
   	 * 功能: Date类型转换成指定格式的字符串类型<br>
   	 * 作者: ZhangBaoRong<br>
   	 * 创建日期: Aug. 3, 2009<br>
   	 * @param str
   	 * @param pattern
   	 * @return
   	 */	
   	public static String dateToStr(Date date,String pattern){
   		SimpleDateFormat sdf = new SimpleDateFormat(pattern);
   		if(date !=null && !"".equals(date)){
   			return sdf.format(date);
   		}
   		 return null;
   	}
   	
   	
   	
	/**
	 * 
	 * 功能: Date类型转换成yyyy-MM-dd HH:mm:ss格式的字符串类型<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param date
	 * @return
	 */
	public static String dateToStrByYmdHms(Date date){
		if (date == null)
			return "";
		else
			return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
	}	
	
	/**
	 * 
	 * 功能: Date类型转换成yyyy-MM-dd HH:mm:ss格式的字符串类型<br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param date
	 * @return
	 */
	public static String dateToStrByYmd(Date date){
		if (date == null)
			return "";
		else
			return new SimpleDateFormat("yyyy-MM-dd").format(date);
	}		
   	
   	
	


	
	/*****************日期比较计算*****************/



	/**
	 * 功能:两个时间比较，返回较早的一个时间 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static Date getPriorDate(Date date1, Date date2) {
		if (null == date1)
			return date2;
		if (null == date2)
			return date1;
		return (date1.before(date2)) ? date1 : date2;
	}

	/**
	 * 功能:两个时间比较，返回较早的一个时间 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param date1
	 * @param date2
	 * @return
	 */
	public static Date getLateDate(Date date1, Date date2) {
		if (null == date1)
			return date2;
		if (null == date2)
			return date1;
		return (date1.after(date2)) ? date1 : date2;
	}
	
	
	
	/**
	 * 功能:计算两个时间值之间间隔的天数 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param before较早的时间<br>
	 * @param after较晚的时间<br>
	 * @return
	 */
	public static int getIntervalDays(Date before, Date after) {
		if(null == before || null == after)
			return 0;
		long interval = Math.abs(after.getTime() - before.getTime());
		return new Long(interval / (24 * 60 * 60 * 1000)).intValue();
	}

	/**
	 * 
	 * 功能:计算两个日期之间的天数<br>
	 * <br>作者: ZhangBaoRong<br>
	 * <br>创建日期:Dec 29, 2008<br>
	 * <br>@param strDate1<br>
	 * <br>@param strDate2<br>
	 * <br>@return
	 */
	public static long getIntervalDays(String strDate1, String strDate2) {
		long longReturn = 0;
		// 开始时间
		java.sql.Date begindate = null;
		// 结束时间
		java.sql.Date enddate = null;
		try {
			begindate = java.sql.Date.valueOf(strDate1);
			enddate = java.sql.Date.valueOf(strDate2);
			/**张宝荣修改的*/
			long thevalue = getIntervalDays(begindate,enddate);
//			long thevalue = (long) ((enddate.getTime() - begindate.getTime())/ (1000 * 60 * 60 * 24) + 0.5);
			longReturn = thevalue;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return longReturn;
	}
	
	/**
	 * 
	 * 功能: 传入时间与系统当前时间的间隔天数 <br>
	 * 作者: ZhangBaoRong<br>
	 * 创建日期:2008-12-18<br>
	 * @param before<br>
	 * @return
	 */
	public static int getIntervalDaysToCurrentDay(Date before) {
		return getIntervalDays(before, new Date());

	}
	
	
	
	
	/**
	 * 
	 * 功能:是不是闰年
	 * <br>作者: ZhangBaoRong
	 * <br>创建日期:Jan 21, 2009
	 * <br>@param year
	 * <br>@return
	 */
	static boolean isLeapYear(int year) { 
		GregorianCalendar c = new GregorianCalendar();
		if (c.isLeapYear(year)){
			return true; 
		}
		return false; 
	}
	


	/**
	 * 
	 * 功能: 根据当前日期和天数得到开始日期<br>
	 * <br>作者: ZhangBaoRong
	 * <br>创建日期:Dec 29, 2008
	 * <br>@param dates
	 * <br>@return
	 * <br>@throws Exception
	 */
	public static String getBeginDateFromNow(int dates) throws Exception {
		// 开始日期
		String beginDate = null;
		String dateString = null;
		try {
			// 格式化日期
			dateString = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
			String year = dateString.substring(0, 4);
			String month = dateString.substring(5, 7);
			String day = dateString.substring(8, 10);
			/*
			 * GregorianCalendar类提供处理日期的方法,注意月份的表示，一月是0，二月是1，以此类推， 是12月是11。
			 */
			GregorianCalendar calendar = new GregorianCalendar(Integer
					.parseInt(year), Integer.parseInt(month) - 1, Integer
					.parseInt(day));
			/*
			 * ().使用add()方法，你能够增加象年，月数，天数到日期对象中。要使用add()方法，
			 * 你必须提供要增加的字段，要增加的数量。一些有用的字段是DATE, MONTH, YEAR, 和 WEEK_OF_YEAR
			 */
			calendar.add(GregorianCalendar.DATE, dates);
			beginDate = new SimpleDateFormat("yyyy-MM-dd").format(calendar
					.getTime());
		} catch (Exception e) {
			e.printStackTrace();
		}

		return beginDate;
	}

	/**
	 * 
	 * 功能: 根据给定日期和天数得到开始日期<br>
	 * <br>作者: ZhangBaoRong<br>
	 * <br>创建日期:Dec 29, 2008<br>
	 * <br>@param date 格式 yyyy-MM-dd<br>
	 * <br>@param dateNum
	 * <br>@return
	 * <br>@throws Exception
	 */
	public static String getBeginDateFromDate(String date, int dateNum) throws Exception {
		// 开始日期
		String beginDate = null;
		try {
			// 格式化日期
			String year = date.substring(0, 4);
			String month = date.substring(5, 7);
			String day = date.substring(8, 10);
			/*
			 * GregorianCalendar类提供处理日期的方法,注意月份的表示，一月是0，二月是1，以此类推， 是12月是11。
			 */
			GregorianCalendar calendar = new GregorianCalendar(Integer
					.parseInt(year), Integer.parseInt(month) - 1, Integer
					.parseInt(day));
			/*
			 * ().使用add()方法，你能够增加象年，月数，天数到日期对象中。要使用add()方法，
			 * 你必须提供要增加的字段，要增加的数量。一些有用的字段是DATE, MONTH, YEAR, 和 WEEK_OF_YEAR
			 */
			calendar.add(GregorianCalendar.DATE, dateNum);
			beginDate = new SimpleDateFormat("yyyy-MM-dd").format(calendar
					.getTime());
		} catch (Exception e) {
			e.printStackTrace();
		}

		return beginDate;
	}
	
	
	
	
	/**
	 * 
	 * 功能:根据一个残缺的年月日格式转换成一个合法的日期格式：如：2005-06-06 2006-02 
	 * 作者: ZhangBaoRong
	 * 创建日期:2008-12-18
	 * @param ymdStr
	 *            残缺的日期：如：2005- 2006-2 2006-6-6 2006/2/3
	 * @return 合理的日期格式：2005 2006-02 2006-06-06 2006-02-03
	 */
	public static String getFullDateStr(String ymdStr) {
		if (ymdStr == null)
			return ymdStr;
		ymdStr = ymdStr.replaceAll("/", "-");
		ymdStr = StringUtils.replace(ymdStr, ".", "-");
		StringBuffer sb = new StringBuffer("");
		String aa[] = ymdStr.split("-");
		if (aa != null && aa.length > 0)
			for (int i = 0; i < aa.length; i++) {
				if (i == 1 && aa[i].length() == 1)
					aa[i] = "0" + aa[i];
				if (i == 2 && aa[i].length() == 1)
					aa[i] = "0" + aa[i];
				sb.append(aa[i] + "-");
			}
		if (sb.length() > 0) {
			if (sb.toString().charAt(sb.length() - 1) == '-')
				return sb.deleteCharAt(sb.length() - 1).toString();
			else
				return sb.toString();
		} else
			return " ";
	}
	
	
	
	/*******************日期相关计算**************/
	
	
	/**
	 * 
	 * 功能: 将日期字符串如：30/01/2009转换成Date对象格式,年、月、日全不为空时返回Date,否则返回null<br>
	 * 作者: LiDafeng  <br>
	 * 创建日期:Jan 19, 2009 <br>
	 * @param dateStr
	 * @return <br>
	 * @throws Exception 
	 */
	public static Date getDateByStr(String dateStr) throws Exception {
		if (StringUtils.isNotBlank(dateStr)) {
			String[] d = dateStr.split("/");
			if (d.length==3) {
//				return getDateYYYYMMDD(StringUtils.trimToEmpty(d[2])
//									+"-"+StringUtils.trimToEmpty(d[1])
//									+"-"+StringUtils.trimToEmpty(d[0]));
				//张宝荣整理类后修改达峰的方法
				return strToDateByYmd(StringUtils.trimToEmpty(d[2])
						+"-"+StringUtils.trimToEmpty(d[1])
						+"-"+StringUtils.trimToEmpty(d[0]));
			}
		}
		return null;
	}	
	
	/**
	 * 
	 * 功能: 时间转型
	 * 作者: ZhangBaoRong
	 * 创建日期:2009-1-4
	 * @param ymdStr
	 * @return
	 */
	public static Date getDateYYYYMMDD(String ymdStr) {
		if (ymdStr == null || ymdStr.equals(""))
			return null;
		try {
			return new SimpleDateFormat("yyyy-MM-dd").parse(ymdStr);
		} catch (ParseException ex) {
			ex.printStackTrace();
		}
		return null;

	}
	
	/**
	 * 
	 * 功能:日期格式字符串转换返回yyyy-mm-dd格式的字符串
	 * 作者: likui
	 * 创建日期: 2012-5-4
	 * 修改者: mender
	 * 修改日期: modifydate
	 * @param dateStr
	 */
	public static String covertToYyyyMmDd(String dateStr){
		String rightStr=dateStr;
		String[] arr=dateStr.split("-");
	    if(arr.length==3){
	    	//将2012-1-4格式的日期字符串转换为2012-01-04格式的字符串
		   if(dateStr.length()<10){
			String y=arr[0];
			String m=arr[1];
			String d=arr[2];
			if(m.length()==1){
				m="0"+m;
			}
			if(d.length()==1){
				d="0"+d;
			}
			rightStr=y+"-"+m+"-"+d;
		  }
		}
	    //对于像09/12/2012这种日期格式字符串的转换
	    String[] arr2=dateStr.split("/"); 
	    if(arr2.length==3){
	    	String y=arr2[2];
			String m=arr2[1];
			String d=arr2[0];
			if(m.length()==1){
				m="0"+m;
			}
			if(d.length()==1){
				d="0"+d;
			}
			rightStr=y+"-"+m+"-"+d;
	    }
		return rightStr;
	}


}
